<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// * 变量被声明了，但没有赋值时，就等于undefined
	// {
	// 	let userName;
	// 	console.log(userName);// undefined
	// }
	
	// * 调用函数时，应该提供的参数没有提供，该参数等于undefined
	// {
	// 	function fn(a,b,c,d){
	// 		console.log(a,b,c,d);// 1 2 3 undefined
	// 	}
	// 	fn(1,2,3)
	// }
	
	// * 对象没有赋值的属性，该属性的值为undefined
	// {
	// 	const obj = {
	// 		userName:"zhangsan"
	// 	}
	// 	console.log(obj.userName);// zhangsan
	// 	console.log(obj.age);// undefined
	// }
	
	
	// * 函数没有返回值时或return右侧没有内容时，默认返回undefined
	// {
	// 	function fn(){
	//
	// 	}
	// 	function fn2(){
	// 		return;
	// 	}
	// 	console.log(fn());// undefined
	// 	console.log(fn2());// undefined
	// }
	
	
	// Undefined常被用于条件判断
	// * 判断函数是否传递参数
	// {
	// 	// if(!undefined){
	// 	// 	console.log(1);
	// 	// }
	//
	// 	// function fn(a){
	// 	// 	// 判断是否传递了参数
	// 	// 	if(a !== undefined){
	// 	// 		console.log("ok");
	// 	// 	}
	// 	// }
	// 	// fn(0)
	// }
	// * 判断对象是否拥有指定的属性
	// {
	// 	const obj = {
	// 		userName:"zhangsan"
	// 	}
	// 	if(obj.userName !== undefined){
	// 		console.log("ok")
	// 	}
	// }
	
	// 基础：undefined,null，0，"" 作为判断相当于false
	// if(undefined){
	// 	console.log("undefined")
	// }
	
	// if(null){
	// 	console.log("null")
	// }
	
	// if(0){
	// 	console.log("0")
	// }
	
	// if(""){
	// 	console.log("空字符串")
	// }
	
	// 补充：??
	let bol = true;
	console.log(bol || "one");// true
	console.log(bol && "two");// two
	console.log(bol?"a":"b");// a
	let obj = {
		// age:0
	}
	// obj.num = obj.age?obj.age:100;
	// obj.num = obj.age || 100;
	// ??:当左侧为undefined或null时会使用右侧的值
	obj.num = obj.age ?? 100;
	console.log(obj.num);
	
	
</script>
</html>